Conversation
589c762 to
63f39a6
Compare
src/stack/CMakeLists.txt
Outdated
|
|
||
|
|
||
|
|
||
|
|
| #include <stdlib.h> | ||
|
|
||
| struct StackNode { | ||
| int value; | ||
| struct StackNode* next; | ||
| }; | ||
|
|
||
| struct Stack { | ||
| struct StackNode* head; | ||
| }; |
There was a problem hiding this comment.
Кажется, Вы не очень разобрались в системе модулей. Модуль состоит из заголовочного файла (.h) и файла с реализацией (.c). В заголовочном файле описывается "интерфейс" модуля, то есть функции и типы, которые можно использовать извне. Чтобы избегать дублирования и ошибок, связанных с разными типами с одним названием, заголовочные файлы требуется обязательно include в файл с реализацией. У Вас не так, поэтому есть дублирование.
src/stack/stack.h
Outdated
| struct StackNode { | ||
| int value; | ||
| struct StackNode* next; | ||
| }; | ||
|
|
||
| struct Stack { | ||
| struct StackNode* head; | ||
| }; |
There was a problem hiding this comment.
Давай
- сделаем это настоящим АТД, чтобы пользователь не мог залезть в реализацию
- сделаем typedef, чтобы слово
structможно было не писать
src/stack/stack.h
Outdated
| struct Stack new(void); | ||
| void push(struct Stack* stack, int value); | ||
| int pop(struct Stack* stack); | ||
| int isEmpty(struct Stack* stack); |
There was a problem hiding this comment.
К функциям требовалось писать комментарии о том, что они делают!
src/stack/stack.c
Outdated
| if (stack->head == NULL) { | ||
| return 0; | ||
| } |
There was a problem hiding this comment.
Вот это ой какое плохое решение --- у Вас ошибка на самом деле лежит в области допустимых значений структуры. Вам нужно или использовать errorCode/outValue, или перелоджить отвественность на пользователя, заставив его вызывать isEmpty всегда, когда он пытается вызывать pop. И любое из решений необходимо задокументировать.
| int isEmpty(struct Stack* stack) | ||
| { | ||
| return stack->head == NULL; | ||
| } |
There was a problem hiding this comment.
Хорошо бы ещё уметь удалять стек
src/stack/task1.c
Outdated
| #include "stack.h" | ||
| #include <stdio.h> | ||
|
|
||
| int isBalanced(char* s) |
| } | ||
|
|
||
| int res = isEmpty(&st); | ||
| return res; |
There was a problem hiding this comment.
Содержательно правда, но вот память течёт. Это нужно исправить. При этом дублировать код для очистки памяти возможно не очень хорошо, но флаг может помочь.
src/stack/CMakeLists.txt
Outdated
|
|
||
|
|
||
|
|
||
|
|
src/stack/stack.c
Outdated
| return stack->head == NULL; | ||
| } | ||
|
|
||
| void delete(Stack* stack) |
There was a problem hiding this comment.
В наших условиях не лучшее название, потому что clang-format считает delete оператором из C++ :(
src/stack/stack.h
Outdated
|
|
||
| Stack* new(); // создание стека | ||
| void push(Stack* stack, int value); // добавляеи элемент на вершину стека | ||
| int pop(Stack* stack); // убирает из стека элемент и возвращает его |
There was a problem hiding this comment.
Я Вас явно просил задокументировать правила использования pop
The merge-base changed after approval.
Шалахина Анна дз 5.1